using System;
using Microsoft.SPOT;
using Microsoft.SPOT.Hardware;

namespace NetduinoHappyHour.Hardware
{
    public interface IRobotGateway
    {
        /// <summary>
        /// Executes a DriveCommand.
        /// See details on concrete implementation
        /// </summary>
        /// <param name="dCommand">
        /// The drive command to be executed
        /// </param>
        void ExecuteDriveCommand(DriveCommand dCommand);

        /// <summary>
        /// Waits for pulling DIGITAL IO Pin to ground, could be used as a start command.
        /// Uses SecretLabs.NETMF.Hardware.Netduino.Pins.ONBOARD_SW1 for waiting
        /// </summary>
        void WaitForOnboardButton();

        /// <summary>
        /// Waits for pulling DIGITAL IO Pin to ground, could be used as a start command.
        /// Use SecretLabs.NETMF.Hardware.Netduino.Pins.GPIO_PIN_Dx for easily adressing the right DIGITAL IO Pin
        /// Also the onboard button could be used to start
        /// </summary>
        /// <param name="waitPin">
        /// The pin to wait for
        /// </param>
        void WaitForPinOrButton(Cpu.Pin waitPin);

        /// <summary>
        /// Blinks onboard led infinitely, DOES NOT RETURN !
        /// </summary>
        void BlinkInfinite();

        /// <summary>
        /// Blinks onboard led n-times
        /// </summary>
        void BlinkShort();
    }
}
